<template>
  <div class="row">
    <!-- for循环注意点：
    (1) v-for一般放最外面，这样里面才可以获取每个元素的元素(当然key是和它一层的)
    (2) 想给图片来个链接就要在外面加a标签
        图片下面的标题一般用p标签
    -->
    <div
      v-show="info.users.length"
      class="card"
      v-for="user in info.users"
      :key="user.login"
    >
      <a :href="user.html_url" target="_blank">
        <img :src="user.avatar_url" style="width: 100px" />
      </a>
      <p class="card-text">{{ user.login }}</p>
    </div>
    <!-- 欢迎使用 -->
    <h1 v-show="info.isFirst">欢迎使用!</h1>
    <!-- 加载中 -->
    <h1 v-show="info.isLoading">加载中...</h1>
    <!-- 错误信息 -->
    <h1 v-show="info.errMsg">{{ info.errMsg }}</h1>
  </div>
</template>

<script>
export default {
  name: "myList",
  data() {
    return {
      info: {
        users: [],
        isFirst: true,
        isLoading: false,
        errMsg: "",
      },
    };
  },
  mounted() {
    /**
     * (3) $bus.$on都是要有$的，因为都是程序员才能看到的属性，on相当于等人上bus
     * (4) 数据太多的时候直接封装成一个对象来赋值
     * */ 
    this.$bus.$on("updateListData", (dataObj) => {
      // this.users = users;
      // this.isFirst = isFirst;
      // this.isLoading = isLoading;
      // this.errMsg = errMsg;
      /**
       * (5) 用ES6的解构并合并的原因：当dataObj传过来没有isFirst的时候，我想用info原有的，只替换其他三个
       *     注意用 解构合并的时候 是指用后面的覆盖前面的，即后面对象的属性个数 <= 前面的对象
       *           如果后面要合并对象的属性的个数等于前面的，那就直接赋值了，不用解构赋值
       * */ 
      this.info = {...this.info,...dataObj}
    });
  },
};
</script>

<style scoped>
.album {
  min-height: 50rem; /* Can be removed; just added for demo purposes */
  padding-top: 3rem;
  padding-bottom: 3rem;
  background-color: #f7f7f7;
}
.card {
  float: left;
  width: 33.333%;
  padding: 0.75rem;
  margin-bottom: 2rem;
  border: 1px solid #efefef;
  text-align: center;
}
.card > img {
  margin-bottom: 0.75rem;
  border-radius: 100px;
}
.card-text {
  font-size: 85%;
}
</style>
